<?xml version='1.0' encoding="utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" xml:lang="en" xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <link href="cpip.css" rel="stylesheet" type="text/css" />
    <title>File: /Users/paulross/dev/linux/linux-3.13/include/asm-generic/div64.h</title>
  </head>
  <body>
    <h1>File: /Users/paulross/dev/linux/linux-3.13/include/asm-generic/div64.h</h1>
    <p>Green shading in the line number column
means the source is part of the translation unit, red means it is conditionally excluded.
Highlighted line numbers link to the translation unit page. Highlighted macros link to
the macro page.</p>
    <pre><a name="1" /><span class="True">       1:</span> <span class="f">#</span><span class="n">ifndef</span> <a href="cpu.c_macros_noref.html#_X0FTTV9HRU5FUklDX0RJVjY0X0hfMA__"><span class="b">_ASM_GENERIC_DIV64_H</span></a>
<a name="2" /><span class="True">       2:</span> <span class="f">#</span><span class="n">define</span> <a href="cpu.c_macros_noref.html#_X0FTTV9HRU5FUklDX0RJVjY0X0hfMA__"><span class="b">_ASM_GENERIC_DIV64_H</span></a>
<a name="3" /><span class="True">       3:</span> <span class="k">/*</span>
<a name="4" /><span class="True">       4:</span> <span class="k"> * Copyright (C) 2003 Bernardo Innocenti &lt;bernie@develer.com&gt;</span>
<a name="5" /><span class="True">       5:</span> <span class="k"> * Based on former asm-ppc/div64.h and asm-m68knommu/div64.h</span>
<a name="6" /><span class="True">       6:</span> <span class="k"> *</span>
<a name="7" /><span class="True">       7:</span> <span class="k"> * The semantics of do_div() are:</span>
<a name="8" /><span class="True">       8:</span> <span class="k"> *</span>
<a name="9" /><span class="True">       9:</span> <span class="k"> * uint32_t do_div(uint64_t *n, uint32_t base)</span>
<a name="10" /><span class="True">      10:</span> <span class="k"> * {</span>
<a name="11" /><span class="True">      11:</span> <span class="k"> *     uint32_t remainder = *n % base;</span>
<a name="12" /><span class="True">      12:</span> <span class="k"> *     *n = *n / base;</span>
<a name="13" /><span class="True">      13:</span> <span class="k"> *     return remainder;</span>
<a name="14" /><span class="True">      14:</span> <span class="k"> * }</span>
<a name="15" /><span class="True">      15:</span> <span class="k"> *</span>
<a name="16" /><span class="True">      16:</span> <span class="k"> * NOTE: macro parameter n is evaluated multiple times,</span>
<a name="17" /><span class="True">      17:</span> <span class="k"> *       beware of side effects!</span>
<a name="18" /><span class="True">      18:</span> <span class="k"> */</span>
<a name="19" /><span class="True">      19:</span> 
<a name="20" /><span class="True">      20:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">types</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="21" /><span class="True">      21:</span> <span class="f">#</span><span class="n">include</span> <span class="f">&lt;</span><span class="b">linux</span><span class="f">/</span><span class="b">compiler</span><span class="f">.</span><span class="b">h</span><span class="f">&gt;</span>
<a name="22" /><span class="True">      22:</span> 
<a name="23" /><span class="True">      23:</span> <span class="f">#</span><span class="n">if</span> <a href="cpu.c_macros_ref.html#_QklUU19QRVJfTE9OR18w"><span class="b">BITS_PER_LONG</span></a> <span class="f">==</span> <span class="c">64</span>
<a name="24" /><span class="True">      24:</span> 
<a name="25" /><span class="True">      25:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_ZG9fZGl2XzA_"><span class="b">do_div</span></a><span class="f">(</span><span class="b">n</span><span class="f">,</span><span class="b">base</span><span class="f">)</span> <span class="f">(</span><span class="f">{</span>                    \
<a name="26" /><span class="True">      26:</span>     <span class="b">uint32_t</span> <span class="b">__base</span> <span class="f">=</span> <span class="f">(</span><span class="b">base</span><span class="f">)</span><span class="f">;</span>                \
<a name="27" /><span class="True">      27:</span>     <span class="b">uint32_t</span> <span class="b">__rem</span><span class="f">;</span>                        \
<a name="28" /><span class="True">      28:</span>     <span class="b">__rem</span> <span class="f">=</span> <span class="f">(</span><span class="f">(</span><span class="b">uint64_t</span><span class="f">)</span><span class="f">(</span><span class="b">n</span><span class="f">)</span><span class="f">)</span> <span class="f">%</span> <span class="b">__base</span><span class="f">;</span>            \
<a name="29" /><span class="True">      29:</span>     <span class="f">(</span><span class="b">n</span><span class="f">)</span> <span class="f">=</span> <span class="f">(</span><span class="f">(</span><span class="b">uint64_t</span><span class="f">)</span><span class="f">(</span><span class="b">n</span><span class="f">)</span><span class="f">)</span> <span class="f">/</span> <span class="b">__base</span><span class="f">;</span>                \
<a name="30" /><span class="True">      30:</span>     <span class="b">__rem</span><span class="f">;</span>                            \
<a name="31" /><span class="True">      31:</span>  <span class="f">}</span><span class="f">)</span>
<a name="32" /><span class="True">      32:</span> 
<a name="33" /><span class="False">      33:</span> <span class="f">#</span><span class="n">elif</span> <a href="cpu.c_macros_ref.html#_QklUU19QRVJfTE9OR18w"><span class="b">BITS_PER_LONG</span></a> <span class="f">==</span> <span class="c">32</span>
<a name="34" /><span class="False">      34:</span> 
<a name="35" /><span class="False">      35:</span> <span class="m">extern</span> <span class="b">uint32_t</span> <span class="b">__div64_32</span><span class="f">(</span><span class="b">uint64_t</span> <span class="f">*</span><span class="b">dividend</span><span class="f">,</span> <span class="b">uint32_t</span> <span class="b">divisor</span><span class="f">)</span><span class="f">;</span>
<a name="36" /><span class="False">      36:</span> 
<a name="37" /><span class="False">      37:</span> <span class="k">/* The unnecessary pointer compare is there</span>
<a name="38" /><span class="False">      38:</span> <span class="k"> * to check for type safety (n must be 64bit)</span>
<a name="39" /><span class="False">      39:</span> <span class="k"> */</span>
<a name="40" /><span class="False">      40:</span> <span class="f">#</span> <span class="n">define</span> <a href="cpu.c_macros_ref.html#_ZG9fZGl2XzA_"><span class="b">do_div</span></a><span class="f">(</span><span class="b">n</span><span class="f">,</span><span class="b">base</span><span class="f">)</span> <span class="f">(</span><span class="f">{</span>                \
<a name="41" /><span class="False">      41:</span>     <span class="b">uint32_t</span> <span class="b">__base</span> <span class="f">=</span> <span class="f">(</span><span class="b">base</span><span class="f">)</span><span class="f">;</span>            \
<a name="42" /><span class="False">      42:</span>     <span class="b">uint32_t</span> <span class="b">__rem</span><span class="f">;</span>                    \
<a name="43" /><span class="False">      43:</span>     <span class="f">(</span><span class="m">void</span><span class="f">)</span><span class="f">(</span><span class="f">(</span><span class="f">(</span><span class="b">typeof</span><span class="f">(</span><span class="f">(</span><span class="b">n</span><span class="f">)</span><span class="f">)</span> <span class="f">*</span><span class="f">)</span><span class="c">0</span><span class="f">)</span> <span class="f">==</span> <span class="f">(</span><span class="f">(</span><span class="b">uint64_t</span> <span class="f">*</span><span class="f">)</span><span class="c">0</span><span class="f">)</span><span class="f">)</span><span class="f">;</span>    \
<a name="44" /><span class="False">      44:</span>     <span class="m">if</span> <span class="f">(</span><a href="cpu.c_macros_ref.html#_bGlrZWx5XzA_"><span class="b">likely</span></a><span class="f">(</span><span class="f">(</span><span class="f">(</span><span class="b">n</span><span class="f">)</span> <span class="f">&gt;&gt;</span> <span class="c">32</span><span class="f">)</span> <span class="f">==</span> <span class="c">0</span><span class="f">)</span><span class="f">)</span> <span class="f">{</span>            \
<a name="45" /><span class="False">      45:</span>         <span class="b">__rem</span> <span class="f">=</span> <span class="f">(</span><span class="b">uint32_t</span><span class="f">)</span><span class="f">(</span><span class="b">n</span><span class="f">)</span> <span class="f">%</span> <span class="b">__base</span><span class="f">;</span>        \
<a name="46" /><span class="False">      46:</span>         <span class="f">(</span><span class="b">n</span><span class="f">)</span> <span class="f">=</span> <span class="f">(</span><span class="b">uint32_t</span><span class="f">)</span><span class="f">(</span><span class="b">n</span><span class="f">)</span> <span class="f">/</span> <span class="b">__base</span><span class="f">;</span>        \
<a name="47" /><span class="False">      47:</span>     <span class="f">}</span> <span class="m">else</span>                         \
<a name="48" /><span class="False">      48:</span>         <span class="b">__rem</span> <span class="f">=</span> <span class="b">__div64_32</span><span class="f">(</span><span class="f">&amp;</span><span class="f">(</span><span class="b">n</span><span class="f">)</span><span class="f">,</span> <span class="b">__base</span><span class="f">)</span><span class="f">;</span>    \
<a name="49" /><span class="False">      49:</span>     <span class="b">__rem</span><span class="f">;</span>                        \
<a name="50" /><span class="False">      50:</span>  <span class="f">}</span><span class="f">)</span>
<a name="51" /><span class="False">      51:</span> 
<a name="52" /><span class="False">      52:</span> <span class="f">#</span><span class="n">else</span> <span class="k">/* BITS_PER_LONG == ?? */</span>
<a name="53" /><span class="False">      53:</span> 
<a name="54" /><span class="False">      54:</span> <span class="f">#</span> <span class="n">error</span> <a href="cpu.c_macros_ref.html#_ZG9fZGl2XzA_"><span class="b">do_div</span></a><span class="f">(</span><span class="f">)</span> <span class="b">does</span> <span class="b">not</span> <span class="b">yet</span> <span class="b">support</span> <span class="b">the</span> <span class="b">C64</span>
<a name="55" /><span class="False">      55:</span> 
<a name="56" /><span class="True">      56:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* BITS_PER_LONG */</span>
<a name="57" /><span class="True">      57:</span> 
<a name="58" /><span class="True">      58:</span> <span class="f">#</span><span class="n">endif</span> <span class="k">/* _ASM_GENERIC_DIV64_H */</span>
<a name="59" /><span class="True">      59:</span> </pre>
  </body>
</html>
